#= 参考文献：
 https://github.com/JuliaAudio/PortAudio.jl
 https://github.com/JuliaAudio/SampledSignals.jl
=#

using PortAudio, SampledSignals
using SampledSignals: SampleBuf # SampleBuf 不能进行 append!, 故使用 data 模式进行数据处理，以Buf为输出前的包装
include("Smoother.jl")

"""全局采样率"""
S_num = 44100

"""
    sound(frequency=440, T=1)
平滑后的标准正弦声波(T*S_num应为整数)
# Arguments
 - `frequency`: 频率
 - `T`: 持续时长
"""
sound(frequency=440, T=1) = smooth(sin.(2pi * (1:T*S_num) * frequency / S_num))


# function play_blank()
#     sleep(blank_time)
# end

"""
    play(data_or_buf)
调用 `PortAudio` 默认设备进行单通道输出
# Arguments
 - `data_or_buf`: 默认全局采样率下的声音数据, 类型可为 `Vector` 及 `SampleBuf`
"""
function play(data_or_buf)
    PortAudioStream(0, 1; samplerate=S_num) do stream
        write(stream, data_or_buf)
    end
end

function play(data, rest...)
    play(data)
    for k in rest
        play(k)
    end
end

"""
    to_buf(data)
结合全局采样率将 data 转为 `SampleBuf` 类型（便于做频谱分析）
"""
function to_buf(data)
    return SampledSignals.SampleBuf(data, S_num)
end

# str_to_buf("1")